const { initPicker } = require("../../utils/util");

const initValue = initPicker();

const years = []
const months = []
const days = []

for (let i = 1000; i <= 3000; i++) {
  years.push(i)
}

for (let i = 1; i <= 12; i++) {
  months.push(i)
}

for (let i = 1; i <= 31; i++) {
  days.push(i)
}

// components/ActionSheet/index.js
Component({
  /*** 组件的属性列表 */
  properties: {
    title: { type: String, value: '选择时间' }
  },

  /*** 组件的初始数据 */
  data: {
    years,
    months,
    days,
    value: initValue,
    isDaytime: true,
    curSelect: 0, // 0 开始时间   1 结束时间 
    picker: [], //  记录时间
    pickerCache: [ formatPicker(initValue), formatPicker(initValue) ], // 时间缓存区
    show: false,
    actions: [],
    success: function() {},
    error: function() {}
  },

  /*** 组件的方法列表 */
  methods: {
    open(options = {}) {
      const { 
        actions = [], 
        success = () => {}, 
        error = () => {} 
      } = options;

      //  打开弹窗之前将数据进行修改成当前的时间

      this.setData({ actions, success, error }, () => {
        this.setData({ show: true })
      }); 
    },
    close() {
      this.setData({ show: false });
    },
    onSelect( event ) {
      const { index } = event.currentTarget.dataset;
      this.setData({ curSelect: index });
    },
    //  点击确定按钮
    onDefine() {
      this.setData({ picker: this.data.pickerCache });
      this.data.success(this.data.picker);
      this.close();
    },
    bindChange(e) {
      const val = e.detail.value;
      formatDay.call(this, val);
      //  缓存数据，便于后期对其进行处理
      this.data.pickerCache[this.data.curSelect] = formatPicker(val);
      compareTime.call(this);
    }
  }
})

//  处理日期的天数，每个月份都会有差距
function formatDay(arr) {
  const year = arr[0] + 1000;
  const month = arr[1] + 1;
  var daycount = new Date(year, month, 0).getDate();
  const days = addDay(daycount);
  //  修改 days 的天数
  this.setData({ days });
}

function formatPicker(arr) {
  const year = arr[0] + 1000;
  const month = arr[1] + 1;
  const day = arr[2] + 1;

  return [ year, month, day ];
}

//  添加day
function addDay(num) {
  const arr = [];
  for(let i = 1; i <= num; i++) {
    arr.push(i);
  }
  return arr;
}

//  比较开始时间 和 结束时间的大小
//  选择开始时间  开始时间 > 结束时间  则  开始时间 == 结束时间
//  选择结束时间  开始时间 > 结束时间  则  开始时间 == 结束时间
function compareTime() {
  console.log(this.data.pickerCache);
  const [ start, end ] = this.data.pickerCache;
  //  获取时间戳
  const startStamp = new Date(...start).getTime();
  const endStamp = new Date(...end).getTime();

  if(startStamp > endStamp) {
    if( this.data.curSelect == 0 ) {  //  随开始时间变动
      this.setData({ pickerCache: [ start, start ] });
    } else if( this.data.curSelect == 1 ) { //  随结束时间变动
      this.setData({ pickerCache: [ end, end ] });
    }
  } else {
    this.setData({ pickerCache: this.data.pickerCache });
  }
}